// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: 'data-0b70e3'
}
)
const db = cloud.database();

function getUserId() {
  let orderId = '';  //订单号
  for (var i = 0; i < 5; i++) //8位随机数，用以加在时间戳后面。
  {
    orderId += Math.floor(Math.random() * 10);
  }
  orderId = 'ID' + new Date().getTime() + orderId;  //时间戳，用来生成用户id。
  return orderId;
}
// 云函数入口函数
exports.main = async (event, context) => {

  //-------------------定义返回至客户端的数据格式
  let resData = {
    login: 'fail',
    openid: '',
    userid: '',
    role: '普通用户',
    error: ''
  }
  //获取当前用户的openid
  resData.openid = event.userInfo.openId;

  //标识：exist存在data定义，则说明存在用户

  let exist = await db.collection('users').where({ openid: resData.openid }).get()

  if (exist.data) //判断返回结果中是否有data定义，有的话说明执行查询成功，否则执行查询失败
  {
    //A.成功执行--按照openid查找用户
    if (exist.data.length == 0) {
      //*******************A-(1):此用户为新用户，需要新增用户信息*******************
      resData.userid = getUserId(); //创建userid
      //执行新的用户信息写入
      let newUser = await db.collection('users').add({
        // data 字段表示需新增的 JSON 数据
        data: {
          userid: resData.userid,
          openid: resData.openid,
          role: '普通用户',
          registertime: db.serverDate(),
          remark: ''
        }
      })
      //判断用户信息录入是否成功
      if (newUser._id) {
        resData.login = 'success'
        resData.error = ''
      }
      else {
        resData.login = 'fail'
        resData.error = '写入用户信息出错'
      }
    }
    else if (exist.data.length == 1) {
      //*******************A-(2):此用户为老用户，直接获取用户信息*******************
      resData.login = 'success'
      resData.userid = exist.data[0].userid;
      resData.role = exist.data[0].role;
      resData.error = ''
    }
    else {
      //*******************A-(3):查询出重复openid数据，说明数据库错误***************
      resData.login = 'fail'
      resData.error = '数据库错误:opendi重复'
    }
  }
  else {
    //B.执行失败--openid查找用户
    resData.login = 'fail'
    resData.error = '无法执行查询API'
  }
  return resData
}